package com.zhuangjie.redis.helper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 *  Redis Hash类型操作助手类 (TODO)
 *  @author zhuangjie
 * @param <K>
 * @param <HK>
 * @param <HV>
 */
@Component
public class RedisHashHelper<K,HK,HV> {
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 批量设置hash结构中的多个字段的值
     * @param key
     * @param fields
     * @return
     */
    public List<HV> multiHGet(K key, List<HK> fields) {
        return redisTemplate.opsForHash().multiGet(key,fields);
    }

    /**
     * hget 获取指定key与field的value，注解这个value不一定是<HV>泛型
     * 如HV是Long，返回的可能是Integer类型
     * @param key   钥匙
     * @param field 领域
     * @return {@link Object}
     */
    public Object hget(K key,HK field) {
        Object value = redisTemplate.opsForHash().get(key, field);
        if(value == null) return null;
        return value;
    }

    /**
     * 设置hash结构中的某个字段的值
     * @param key
     * @param field
     * @param value
     */
    public void hset(K key, HK field, HV value) {
        redisTemplate.opsForHash().put(key,field,value);
    }
}
